package 二叉树.层序遍历;



import com.sun.net.httpserver.HttpServer;

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Queue;
import java.util.concurrent.Executors;

class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;


    }

}
public class Solution {
    /**
     *
     * @param root TreeNode类
     * @return int整型ArrayList<ArrayList<>>
     * 每次输出一层的结点
     */

    public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
        ArrayList<ArrayList<Integer>> lists = new ArrayList<>();
        Queue<TreeNode> queue = new ArrayDeque<>();
        if (root==null){
            return lists;
        }
        queue.add(root);
        while (queue.size()!=0){
            // 在每次进行出队的时候, 先计算当前队列中的结点的个数:  每出队一次就把该结点的左孩子结点 以及 右孩子结点都入队， 然后再从对头出下一个结点，
            // 并且把孩子节点也都出队。  直到把出对之前记录的数量出完，  本层就出完了。
            int size = queue.size();
            ArrayList<Integer> arrayList = new ArrayList<>();
            for (int i = 0; i < size; i++) {
                TreeNode poll = queue.poll();
                arrayList.add(poll.val);

                if (poll.left!=null){
                    queue.add(poll.left);
                }
                if (poll.right!=null){
                    queue.add(poll.right);
                }
            }
            lists.add(arrayList);
        }
        return lists;
    }
}